package com.mindskip.xzs.configuration.spring.security;
//自定义认证失败处理器类 RestAuthenticationFailureHandler，它继承自 SimpleUrlAuthenticationFailureHandler
//当用户尝试进行认证但认证失败时，Spring Security 会抛出 AuthenticationException 异常。
//RestAuthenticationFailureHandler 类的作用是捕获这个异常，并自定义处理认证失败的行为。
//在前端应用中，当用户进行认证但认证失败时，前端会收到一个认证失败的响应。
//这个响应通常会包含一个特定的状态码和消息，告知前端用户认证失败的原因。
//在后端，RestAuthenticationFailureHandler 的 onAuthenticationFailure 方法被调用来处理认证失败的情况。
//在 onAuthenticationFailure 方法中，通过调用 RestUtil.response(response, SystemCode.AuthError.getCode(), exception.getMessage()) 方法，向客户端发送一个包含认证失败信息的响应。
//SystemCode.AuthError.getCode() 可能是一个枚举类型，用来表示认证失败的状态码，exception.getMessage() 则是认证失败时的异常信息。
import com.mindskip.xzs.base.SystemCode;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

// 使用@Component注解将这个类声明为一个Spring组件
@Component
// 自定义认证失败处理器类，继承自SimpleUrlAuthenticationFailureHandler
public class RestAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {

    // 重写onAuthenticationFailure方法，处理认证失败的情况
    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) {
        // 使用自定义工具类RestUtil向客户端发送认证失败的响应
        // 传递响应对象、错误代码和异常信息
        RestUtil.response(response, SystemCode.AuthError.getCode(), exception.getMessage());
    }
}
